package jp.co.ikd.util;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

/**
 * BigDecimal#BigDecimal(int)は 整数 → 浮動小数点変換時に丸め誤差が発生してしまう。 BigDecimal#BigDecimal(String)を利用し 文字列 → 浮動小数点の変換を行うのが正解。
 * */
public class Decimal {

	public static void main(String[] args) {

		// intは浮動小数点
		BigDecimal bdecInt = new BigDecimal(123.45600);

		BigDecimal bdecString = new BigDecimal("123.456");

		BigDecimal bdecString2 = new BigDecimal("123.45600");

		System.out.println(bdecInt);

		System.out.println(bdecString);

		System.out.println(bdecString2);

		System.out.println(bdecString.add(bdecString2));

		System.out.println(multiply(bdecString, bdecString2));

		System.out.println(bdecInt);

		System.out.println(bdecString);

		System.out.println(bdecString2);

		// new DecimalFormat().

		System.out.println("--- format ---");

		// System.out.println(new DecimalFormat("#,###").format("1234567890"));

		System.out.println(new DecimalFormat("￥#,###－").format(bdecString2));
	}

	public static BigDecimal add(BigDecimal b1, BigDecimal b2) {
		return b1.add(b2);
	}

	public static BigDecimal subtract(BigDecimal b1, BigDecimal b2) {
		return b1.add(b2.multiply(new BigDecimal("-1")));
	}

	public static BigDecimal multiply(BigDecimal b1, BigDecimal b2) {
		BigDecimal bd = new BigDecimal("0.00");
		return bd.add(b1.multiply(b2));
	}

	public static String format(BigDecimal b, int scale, boolean comma, boolean yen, boolean parsent) {

		String format = "";

		if (comma) {
			format = "#,###";
		}

		if(scale > 0){
			format = format + ".";
		}

		for (int i = 0; i < scale; i++) {
			format = format + "#";
		}

		if (yen) {
			format = "￥" + format;
		}

		if (parsent) {
			format = format + "'%'";
		}

		System.out.println("format:" + format);
		DecimalFormat df = new DecimalFormat(format);
		df.setRoundingMode(RoundingMode.DOWN);
		return df.format(b);
	}
}
